home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 1, No. 05 (1982-01)(Softdisk)(Side B).zip / Softdisk Magazette Volume 1, No. 05 (1982-01)(Softdisk)(Side B).do / YAHTZEE.bas < prev   
BASIC Source File  |  1996-12-24  |  10KB  |  212 lines

  1. 10  REM  YAHTZEE
  2. 20  TEXT : HOME 
  3. 90  REM  *INITIALIZE VARIABLES
  4. 100  CLEAR : DIM M(72):M(49) = 1:M(50) = 2:M(51) = 3:M(52) = 4:M(53) = 5:M(54) = 6:M(65) = 7:M(66) = 8:M(67) = 9:M(68) = 10:M(69) = 11:M(70) = 12:M(71) = 13:M(72) = 14:LT = 500
  5. 110  HOME : PRINT "M I C R O - Y A H T Z E E": PRINT : PRINT "INSTRUCTIONS? (Y) OR (N)";
  6. 120  GET N$: IF N$ = "Y"  THEN  GOSUB 1970
  7. 130 C1 = 1: DIM P1(14),B(13),B$(13),P2(14),A(14),P1$(13),P2$(13),P3(14),P4(14)
  8. 140  HOME : INPUT "ENTER 1ST PLAYER'S NAME ";P1$: INPUT "ENTER SECOND PLAYER'S NAME ";P2$
  9. 150 G1 = 0: HOME : FOR A = 1 TO 13:A(A) = .5:P1(A) = .5:P1$(A) = " *":P2$(A) = " *":P2(A) = .5: NEXT A:A(14) = .5: HOME 
  10. 160  IF N <0  OR N >5  THEN 290
  11. 170  HTAB 1: VTAB 15: PRINT "                                        ": GOSUB 1280
  12. 175  REM  *DISPLAY CATAGORIES AND SCORES
  13. 180  FOR A = 1 TO 13: READ B$: VTAB (A): HTAB (15): PRINT B$: VTAB (A): HTAB 27: PRINT P1$(A);" ": VTAB (A): HTAB 32: PRINT P2$(A);" ": NEXT A: IF G1 = 26  THEN 1370
  14. 190  HTAB 1: VTAB 11: PRINT P3$;"'S ": PRINT " TURN";
  15. 200  ON A1 GOSUB 1730,1740
  16. 210  DATA 1-ONES------,2-TWOS------,3-THREES----,4-FOURS-----,5-FIVES-----,6-SIXES-----,A-3 OF KIND-,B-4 OF KIND-,C-FULL HOUSE,D-SM.STRT---,E-LG.STRT---,F-YAHTZEE---,G-CHANCE----
  17. 220  RESTORE 
  18. 230  HTAB 1: VTAB 1: PRINT "Y A H T Z E E"
  19. 240 Q = 911:S = 0
  20. 245  REM  *ROLL DICE AND CHANGE SELECTED DICE
  21. 250  FOR X = 1 TO 5:H(X) =  INT( RND(1) *6) +1: NEXT X
  22. 260  GOSUB 1760
  23. 270  VTAB 15: PRINT "YOUR ROLL IS..."H(1);H(2);H(3);H(4);H(5)
  24. 280  VTAB 16: PRINT  CHR$(24)
  25. 290  VTAB 17: INPUT "  HOW MANY CHANGES ";N$:N =  VAL(N$)
  26. 300  VTAB 17: PRINT "                         "
  27. 310  IF N$ = ""  THEN 290
  28. 320  IF N <0  OR N >5  THEN 290
  29. 330  IF N$ >"53"  THEN N$ = "0"
  30. 340  IF N$ = "5"  OR N$ = "0"  THEN  GOTO 360
  31. 350  PRINT "    WHICH ";"(";N;")";" "
  32. 360  IF N = 5  THEN P(1) = 1:P(2) = 2:P(3) = 3:P(4) = 4:P(5) = 5: GOTO 450
  33. 370  IF N = 0  THEN S = 2: GOTO 460
  34. 380  FOR O = 1 TO N
  35. 390  GET P$(O): VTAB 18: PRINT "             "
  36. 400  VTAB 15: HTAB (33 -N): PRINT "  ";: IF P$(O) <"0"  OR P$(O) >"5"  THEN 390
  37. 410 P(O) =  VAL(P$(O)): VTAB 18: HTAB 20: PRINT "CHANGED #";P(O)
  38. 420  FOR D = 1 TO 500: NEXT 
  39. 430  NEXT O
  40. 440  FOR N2 = 1 TO 50: VTAB 18: HTAB 20: PRINT "            "
  41. 450  FOR Q = 1 TO N:H(P(Q)) =  INT( RND(1) *6) +1: NEXT Q
  42. 460 C = 0
  43. 470  FOR Q = 1 TO 4
  44. 480  IF H(Q) < = H(Q +1)  THEN 500
  45. 490 T = H(Q):H(Q) = H(Q +1):H(Q +1) = T:C = C +1
  46. 500  NEXT Q
  47. 510  IF C >0  THEN 460
  48. 520  VTAB 15: PRINT "NEXT ROLL IS...";H(1);H(2);H(3);H(4);H(5):S = S +1
  49. 530  IF S <2  THEN 280
  50. 535  REM  *CATAGORY SELECTION
  51. 540  VTAB 15: PRINT "FINAL ROLL--->"H(1);H(2);H(3);H(4);H(5);" ENTER OPTION  ";: INPUT N$: IF N$ = ""  THEN 540
  52. 550 T1 =  ASC(N$)
  53. 560  IF T1 <49  OR T1 >54  AND T1 <65  OR T1 >71  THEN 540
  54. 570 T = M(T1)
  55. 580  IF T <1  OR T >14  THEN 540
  56. 590  IF A(T) < >.5  THEN  VTAB 17: PRINT  CHR$(7): PRINT  CHR$(7): PRINT "YOU USED THAT ALREADY": FOR DL = 1 TO 1500: NEXT DL: VTAB 19: PRINT "                     ": GOTO 540
  57. 600 G1 = G1 +1
  58. 610  REM  *SUBRT. PUTS NEW SCORE INTO ACTIVE PLAYERS VARIABLES
  59. 620  ON T GOSUB 710,710,710,710,710,710,770,770,890,1040,1040,1210,1240,1370
  60. 630  IF C1/2 < > INT(C1/2)  THEN  GOTO 670
  61. 640  FOR A = 1 TO 13:P1(A) = A(A): NEXT A
  62. 650  GOSUB 1590
  63. 660  GOTO 170
  64. 670  FOR A = 1 TO 13:P2(A) = A(A): NEXT A
  65. 680  GOSUB 1660
  66. 690  GOTO 170
  67. 700  REM  *COUNTS DICE FOR BONUS
  68. 710 V = 0
  69. 720  FOR U = 1 TO 5
  70. 730  IF H(U) = T  THEN V = V +1
  71. 740  NEXT U
  72. 750 A(T) = V *T: RETURN 
  73. 760  REM * CHECKS FOR 3 AND 4 OF A KIND
  74. 770  IF T = 7  THEN B5 = 3
  75. 780  IF T = 8  THEN B5 = 4
  76. 790  FOR B2 = 1 TO 5
  77. 800  FOR B3 = 1 TO 5
  78. 810  IF H(B2) = H(B3)  THEN B6 = B6 +1
  79. 820  NEXT B3
  80. 830  IF B6 <B5  THEN B6 = 0
  81. 840  IF B6 >B5  THEN 870
  82. 850  NEXT B2
  83. 860 B6 = 0:A(T) = 0: RETURN 
  84. 870 A(T) = H(1) +H(2) +H(3) +H(4) +H(5):B6 = 0: RETURN 
  85. 880  REM  *CHECKS FOR FULL HOUSE
  86. 890 M3 = 1
  87. 900  FOR F2 = 2 TO 5
  88. 910  IF H(1) = H(F2)  THEN 930
  89. 920 M2 = M2 +1:D(M2) = H(F2): GOTO 940
  90. 930 M3 = M3 +1
  91. 940  NEXT F2
  92. 950  FOR E1 = 1 TO M2
  93. 960  IF D(1) = D(E1)  THEN 980
  94. 970 A(9) = 0:M2 = 0: RETURN 
  95. 980  NEXT E1
  96. 990  IF M2 >3  THEN 970
  97. 1000  IF M3 >3  THEN 970
  98. 1010  IF (M2 +M3) < >5  THEN 970
  99. 1020 A(9) = 35:M2 = 0: RETURN 
  100. 1030  REM  *CHECKS FOR SMALL OR LARGE STRAIGHT
  101. 1040 G3 = 0:L1 = 0
  102. 1050  IF T = 10  THEN 1080
  103. 1060  IF H(1) = H(2) -1  AND H(2) = H(3) -1  AND H(3) = H(4) -1  AND H(4) = H(5) -1  THEN 1190
  104. 1070 A(11) = 0: RETURN 
  105. 1080 W1 = 0
  106. 1090  FOR A = 1 TO 5:W(A) = 0: NEXT A
  107. 1100  FOR A = 1 TO 5
  108. 1110  IF H(A) = H(A +1)  THEN 1140
  109. 1120 W1 = W1 +1
  110. 1130 W(W1) = H(A)
  111. 1140  NEXT A
  112. 1150  IF W(1) +1 = W(2)  AND W(2) +1 = W(3)  AND W(3) +1 = W(4)  THEN 1180
  113. 1160  IF W(2) +1 = W(3)  AND W(3) +1 = W(4)  AND W(4) +1 = W(5)  THEN 1180
  114. 1170 A(10) = 0: RETURN 
  115. 1180 A(10) = 35: RETURN 
  116. 1190 A(11) = 40: RETURN 
  117. 1200  REM  *CHECKS FOR YAHTZEE
  118. 1210  IF H(1) = H(2)  AND H(2) = H(3)  AND H(3) = H(4)  AND H(4) = H(5)  THEN A(12) = 50: RETURN 
  119. 1220 A(12) = 0: RETURN 
  120. 1230  REM * TOTALS DICE FOR CHANCE
  121. 1240 A(13) = 0
  122. 1250  FOR A = 1 TO 5:A(13) = A(13) +H(A): NEXT A
  123. 1260  RETURN 
  124. 1270  REM  *SET UP TEMP. SET OF CATAGORY NUMBERS
  125. 1280 C1 = C1 +1: IF C1/2 < > INT(C1/2)  THEN 1330
  126. 1290 P3$ = P1$
  127. 1300 A1 = 1
  128. 1310  FOR A = 1 TO 13:A(A) = P1(A): NEXT A
  129. 1320  RETURN 
  130. 1330 P3$ = P2$
  131. 1340 A1 = 2
  132. 1350  FOR A = 1 TO 13:A(A) = P2(A): NEXT A: RETURN 
  133. 1360  REM  *CHECK FOR BONUS ELIGIBILITY
  134. 1370 F7 = 0
  135. 1380  FOR A = 1 TO 6:F7 = F7 +P1(A): NEXT A
  136. 1390  IF F7 <63  THEN F7 = 0
  137. 1400  IF F7 >62  THEN F7 = 35
  138. 1410  IF F7 = 35  THEN PO = PO +1:PO(1) = 35
  139. 1420  FOR A = 1 TO 13:B7 = B7 +P1(A): NEXT A
  140. 1430 B7 = B7 +F7:T1 =  INT(B7):B7 = 0
  141. 1440 F7 = 0: FOR A = 1 TO 6:F7 = F7 +P2(A): NEXT A
  142. 1450  IF F7 <63  THEN F7 = 0
  143. 1460  IF F7 >62  THEN F7 = 35
  144. 1470  IF F7 = 35  THEN PT = PT +1:PT(1) = 35
  145. 1480  FOR A = 1 TO 13:B7 = B7 +P2(A): NEXT A
  146. 1490  REM  *TOTALS SCORES FOR GAME
  147. 1500 B7 = B7 +F7:T2 =  INT(B7): VTAB 20: PRINT P1$;"=";T1;" BONUS=";PO(1):PO(1) = 0: VTAB 21: PRINT P2$;"=";T2;" BONUS=";PT(1):PT(1) = 0:B7 = 0:P1(14) = T1:P2(14) = T2
  148. 1510  REM * CHECK FOR NEW HIGH OR LOW SCORE
  149. 1520  IF T1 >T2  THEN W4 = W4 +1
  150. 1530  IF T1 <T2  THEN W2 = W2 +1
  151. 1540  IF T1 = T2  THEN W3 = W3 +1
  152. 1550 T3 = T3 +1:T4 = T4 +T2:T5 = T5 +1: PRINT "PRESS ANY KEY TO CONTINUE"
  153. 1560  GET L5$: GOSUB 1840
  154. 1570  GOTO 150
  155. 1580  REM  *SETS PLAYER ONE'S SCORES TO STRINGS
  156. 1590  FOR A = 1 TO 13
  157. 1600 P1$(A) =  STR$(P1(A))
  158. 1610  IF P1(A) = 0  THEN P1$(A) = " X"
  159. 1620  IF P1(A) = .5  THEN P1$(A) = " *"
  160. 1630  NEXT A
  161. 1640  RETURN 
  162. 1650  REM  *SETS PLAYER TWO'S SCORES TO STRINGS
  163. 1660  FOR A = 1 TO 13
  164. 1670 P2$(A) =  STR$(P2(A))
  165. 1680  IF P2(A) = 0  THEN P2$(A) = " X"
  166. 1690  IF P2(A) = .5  THEN P2$(A) = " *"
  167. 1700  NEXT A
  168. 1710  RETURN 
  169. 1720  REM  *PLAYER TURN INDICATOR
  170. 1730  VTAB 14: HTAB 28: PRINT "^";"      ": RETURN 
  171. 1740  VTAB 14: HTAB 28: PRINT "     ";"^": RETURN 
  172. 1750  REM  *SORT DICE INTO ORDER
  173. 1760 C = 0
  174. 1770  FOR Q = 1 TO 4
  175. 1780  IF H(Q) < = H(Q +1)  THEN 1800
  176. 1790 T = H(Q):H(Q) = H(Q +1):H(Q +1) = T:C = C +1
  177. 1800  NEXT Q
  178. 1810  IF C >0  THEN 1760
  179. 1820  RETURN 
  180. 1830  REM  *TOTAL ALL SCORES AND DISPLAY SUMMARY
  181. 1840  HOME : FOR A = 1 TO 14:P3(A) = P3(A) +P1(A):P4(A) = P4(A) +P2(A): NEXT A
  182. 1850  READ A$: IF A$ = "START"  THEN 1870
  183. 1860  IF A$ < >"START"  THEN  GOTO 1850
  184. 1870  PRINT "    ";P1$,P2$
  185. 1880  FOR A = 1 TO 14: READ A$: PRINT A$;"   ";: PRINT  INT(P3(A)/T5 +.49), INT(P4(A)/T5 +.49): NEXT A
  186. 1890  IF HT < = P1(14)  THEN HT = P1(14):HT$ = P1$
  187. 1900  IF LT > = P1(14)  THEN LT = P1(14):LT$ = P1$
  188. 1910  IF HT < = P2(14)  THEN HT = P2(14):HT$ = P2$
  189. 1920  IF LT > = P2(14)  THEN LT = P2(14):LT$ = P2$
  190. 1930  PRINT : PRINT "LOWEST SCORE WAS BY ";LT$;"=";LT: PRINT "HIGHEST SCORE WAS BY ";HT$;"=";HT: PRINT P1$;"'S";" BONUS =";PO;" OF ";T5: PRINT P2$;"'S";" BONUS =";PT;" OF ";T5: PRINT P1$;"=";W4;"    ";P2$;"=";W2;"    ";"TIES=";W3
  191. 1940  PRINT "PRESS ANY KEY TO START NEW GAME": GET N$
  192. 1950  RESTORE : RETURN 
  193. 1960  DATA  START,1=,2=,3=,4=,5=,6=,A=,B=,C=,D=,E=,F=,G=,AV
  194. 1965  REM  *DISPLAY INSTRUCTIONS
  195. 1970  HOME : VTAB 8: PRINT "HERE'S THE INSTRUCTIONS": PRINT : PRINT "THE GAME INVOLVES THE 'ROLLING' OF FIVE DICE AND GETTING COMBINATIONS THAT MATCHEACH OF THE 13 CATAGORIES. (E.G. 3 OF A KIND, LARGE STRAIGHT ETC.)"
  196. 1980  PRINT : PRINT "ON EACH TURN YOU GET TO ROLL THE DICE 3 TIMES AND CAN DECIDE ON ROLLS TWO AND   THREE TO RE-ROLL JUST THE ONES YOU WANT.WHEN THE COMPUTER ASKS 'WHICH ONES', YOURESPOND WITH THE DIE NUMBER   (1 TO 5 - LEFT TO RIGHT)."
  197. 1990  VTAB 22: PRINT "PUSH ANY KEY TO CONTINUE INSTRUCTIONS": GET N$
  198. 2000  HOME : VTAB 8: PRINT "AFTER THE LAST ROLL YOU MUST CHOOSE A   CATAGORY (EVEN IF YOUR ROLL DOES NOT    MATCH ONE). YOU MUST CHOOSE ONE, AND IF YOUR ROLL DOESN'T MATCH THEN THAT       CATAGORY WILL JUST BE 'X' OUT (ZERO     POINTS)."
  199. 2010  PRINT : PRINT "THE 'BONUS' CATAGORIES ARE 1 TO 6. YOU  GET A BONUS OF 35 POINTS IF YOUR TOTAL  FOR CATAGORIES 1 TO 6 IS 63 OR MORE."
  200. 2020  VTAB 22: PRINT "PUSH ANY KEY TO CONTINUE INSTRUCTIONS.": GET N$
  201. 2030  HOME : VTAB 1: PRINT "THE FOLLOWING ARE THE POINTS FOR EACH   CATAGORY."
  202. 2040  PRINT : PRINT "     (1-6) BONUS POINTS. DIES MATCHING": HTAB 12: PRINT "CATAGORY ARE ADDED"
  203. 2050  PRINT "       (A) 3 OF A KIND. ALL DICE ARE": HTAB 12: PRINT "ADDED"
  204. 2060  PRINT "       (B) 4 OF A KIND. ALL DICE ARE": HTAB 12: PRINT "ADDED"
  205. 2070  PRINT "       (C) FULL HOUSE. (3 AND 2 OF ANY": HTAB 12: PRINT "KIND) = 35 PTS.
  206. 2080  PRINT "       (D) SMALL STRAIGHT.4 IN SEQUENCE": HTAB 12: PRINT "= 35 POINTS"
  207. 2090  PRINT "       (E) LARGE STRAIGHT.5 IN SEQUENCE": HTAB 12: PRINT "= 40 PTS."
  208. 2100  PRINT "       (F) YAHTZEE. ALL 5 SAME.= 50 PTS.";
  209. 2110  PRINT "       (G) CHANCE. ANY COMBINATION.": HTAB 12: PRINT "ALL DICE ADDED"
  210. 2120  VTAB 22: PRINT "PUSH ANY KEY TO CONTINUE INSTRUCTIONS.": GET N$
  211. 2130  HOME : VTAB 10: PRINT "NOTE: PUSHING 5 AT 'HOW MANY CHANGES',  RE-ROLLS ALL THE DICE.": PRINT : PRINT "NOTE: PUSHING 0 AT 'HOW MANY CHANGES'   PROMPTS THE 'WHICH OPTION'."
  212. 2150  VTAB 22: PRINT "PUSH ANY KEY TO START GAME": GET N$: RETURN